{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "27305da3",
   "metadata": {},
   "source": [
    "# IQ Signal Analyzer\n",
    "Looks for dropped samples across enabled channels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "18628674",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "802ee442",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RX1\n",
      "Index  Q     I\n",
      "----------------\n",
      "[ 0]   500    0\n",
      "[ 1]     0  500\n",
      "[ 2]  -500    0\n",
      "[ 3]     0 -500\n",
      "[ 4]   500    0\n",
      "[ 5]     0  500\n",
      "[ 6]  -500    0\n",
      "[ 7]     0 -500\n",
      "[ 8]   500    0\n",
      "[ 9]     0  500\n",
      "[10]  -500    0\n",
      "[11]     0 -500\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "n=4096\n",
    "samp_rate = 61.44e6\n",
    "file = './build/result.bin'\n",
    "\n",
    "samples = np.fromfile(file, np.int16).astype(np.float32).view(np.complex64)\n",
    "freq = np.fft.fftfreq(n, 1/samp_rate)\n",
    "freq = np.fft.fftshift(freq)\n",
    "fft_rx1 = np.fft.fft(samples, n)\n",
    "fft_rx1 = np.fft.fftshift(fft_rx1)\n",
    "\n",
    "plt.plot(freq/1e6, np.abs(fft_rx1)/len(samples))\n",
    "plt.show()\n",
    "\n",
    "# Plot constellation to make sure it looks right\n",
    "print(f\"RX1\")\n",
    "print(f\"Index  Q     I\")\n",
    "print(f\"----------------\")\n",
    "for i, val in enumerate(samples):\n",
    "    print(f\"[{i:2.0f}]  {val.real:4.0f} {val.imag:4.0f}\")\n",
    "    if i > 10:\n",
    "        break;\n",
    "\n",
    "plt.plot(np.real(samples), np.imag(samples), '.')\n",
    "plt.grid(True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "09195bd5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index   Q     I\n",
      "----------------\n",
      "[rx1]   500    0\n",
      "[rx2]   500    0\n",
      "[rx1]     0  500\n",
      "[rx2]     0  500\n",
      "[rx1]  -500    0\n",
      "[rx2]  -500    0\n",
      "[rx1]     0 -500\n",
      "[rx2]     0 -500\n",
      "[rx1]   500    0\n",
      "[rx2]   500    0\n",
      "[rx1]     0  500\n",
      "[rx2]     0  500\n",
      "[rx1]     0  500\n",
      "[rx2]     0  500\n",
      "[rx1]     0  500\n",
      "[rx2]     0  500\n",
      "[rx1]  -500    0\n",
      "[rx2]  -500    0\n",
      "[rx1]     0 -500\n",
      "[rx2]     0 -500\n",
      "[rx1]   500    0\n",
      "[rx2]   500    0\n",
      "\n",
      "\n",
      "RX1                RX2\n",
      "Index  Q     I     Q     I\n",
      "--------------------------------\n",
      "[ 0]   500    0  500    0\n",
      "[ 1]     0  500    0  500\n",
      "[ 2]  -500    0 -500    0\n",
      "[ 3]     0 -500    0 -500\n",
      "[ 4]   500    0  500    0\n",
      "[ 5]     0  500    0  500\n",
      "[ 6]     0  500    0  500\n",
      "[ 7]     0  500    0  500\n",
      "[ 8]  -500    0 -500    0\n",
      "[ 9]     0 -500    0 -500\n",
      "[10]   500    0  500    0\n",
      "[11]     0  500    0  500\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "file = './result2.bin'\n",
    "samples = np.fromfile(file, np.int16).astype(np.float32).view(np.complex64)\n",
    "rx1 = samples[::2]\n",
    "rx2 = samples[1::2]\n",
    "\n",
    "n=4096\n",
    "samp_rate = 61.44e6\n",
    "if_supression_factor = 1\n",
    "if_supression_range = 200\n",
    "\n",
    "freq = np.fft.fftfreq(n, 1/samp_rate)\n",
    "freq = np.fft.fftshift(freq)\n",
    "freq_filt = (freq>-if_supression_range) & (freq < if_supression_range)\n",
    "\n",
    "fft_rx1 = np.fft.fft(rx1, n) / len(rx1)\n",
    "fft_rx1 = np.fft.fftshift(fft_rx1)\n",
    "fft_rx1[freq_filt] = if_supression_factor*np.log(fft_rx1[freq_filt])\n",
    "\n",
    "fft_rx2 = np.fft.fft(rx2, n) / len(rx2)\n",
    "fft_rx2 = np.fft.fftshift(fft_rx2)\n",
    "fft_rx2[freq_filt] = if_supression_factor*np.log(fft_rx2[freq_filt])\n",
    "\n",
    "plt.figure(figsize=(10,5))\n",
    "plt.plot(freq/1e6, np.abs(fft_rx1))\n",
    "plt.plot(freq/1e6, np.abs(fft_rx2), alpha=0.4, color=\"red\")\n",
    "plt.legend([\"RX1\",\"RX2\"])\n",
    "plt.show()\n",
    "\n",
    "# Plot constellation to make sure it looks right\n",
    "print(f\"Index   Q     I\")\n",
    "print(f\"----------------\")\n",
    "channels = [\"rx1\", \"rx2\"]\n",
    "for i, val in enumerate(samples[::1]):\n",
    "    print(f\"[{channels[i%2]}]  {val.real:4.0f} {val.imag:4.0f}\")\n",
    "    if i > 20:\n",
    "        print(f\"\\n\")\n",
    "        break;\n",
    "\n",
    "print(f\"RX1                RX2\")\n",
    "print(f\"Index  Q     I     Q     I\")\n",
    "print(f\"--------------------------------\")\n",
    "for i in range(0,len(rx1)):\n",
    "    print(f\"[{i:2.0f}]  {rx1[i].real:4.0f} {rx1[i].imag:4.0f} {rx2[i].real:4.0f} {rx2[i].imag:4.0f}\")\n",
    "    if i > 10:\n",
    "        break;\n",
    "        \n",
    "plt.plot(np.real(rx1), np.imag(rx1), '.')\n",
    "plt.plot(np.real(rx2), np.imag(rx2), '.')\n",
    "plt.grid(True)\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
